package cn.cangfei.massage.service;

import cn.cangfei.massage.dto.param.UserBasicInfoParam;
import cn.cangfei.massage.dto.param.UserRegisterParam;
import cn.cangfei.massage.dto.update.UserUpdateParam;
import cn.cangfei.massage.entity.UserBasicInfo;

import java.util.List;
import java.util.Optional;

/**
 * 普通用户基础信息接口
 *
 * @author Lemon  2313812755@qq.com
 * @date 2023/1/28
 */

public interface IUserBasicInfoService {

    /**
     * 发送注册短信
     *
     * @param phone 手机号码
     * @return 是否成功
     */
    boolean sendMessage(String phone);

    /**
     * 校验短信验证码
     *
     * @param phone 手机号
     * @param code  验证码
     * @return 是否正确
     */
    boolean verifyCode(String phone, String code);

    /**
     * 创建普通用户信息
     *
     * @param param 普通用户信息参数
     * @return 是否成功
     */
    boolean insert(UserRegisterParam param);

    /**
     * 创建普通用户信息
     *
     * @param user 普通用户信息参数
     * @return 是否成功
     */
    boolean save(UserBasicInfo user);

    /**
     * 更新普通用户信息
     *
     * @param id    用户编号
     * @param param 普通用户信息参数
     * @return 是否成功
     */
    boolean update(Long id, UserBasicInfoParam param);

    /**
     * 删除普通用户信息
     *
     * @param id 用户编号
     * @return 是否成功
     */
    boolean delete(Long id);

    /**
     * 获取普通用户信息
     *
     * @param id 用户编号
     * @return 普通用户信息
     */
    Optional<UserBasicInfo> getOptional(Long id);

    /**
     * 获取普通用户信息
     *
     * @param phone 手机号
     * @return 普通用户信息
     */
    Optional<UserBasicInfo> getOptionalByPhone(String phone);


    /**
     * 通过关键词，查找用户信息列表
     *
     * @param name     用户名
     * @param phone    手机号
     * @param pageNum  第几页
     * @param pageSize 页大小
     * @return 用户信息列表
     */
    List<UserBasicInfo> list(String name, String phone, Integer pageNum, Integer pageSize);

    /**
     * 判断用户信息是否存在
     *
     * @param id 用户编号
     * @return 是否存在
     */
    boolean count(Long id);

    /**
     * 判断用户信息是否存在
     *
     * @param phone 手机号
     * @return 是否存在
     */
    boolean countByPhone(String phone);

    /**
     * 根据电话列表获取所有人的信息
     *
     * @param phoneList
     * @return
     */
    List<UserBasicInfo> getListByPhones(List<String> phoneList);

    /**
     * 获取用户姓名
     *
     * @param userId
     * @return
     */
    String getName(Long userId);

    /**
     * 获取用户信息
     *
     * @param userIds
     * @return
     */
    List<UserBasicInfo> getNameByUserIds(List<Long> userIds);

    /**
     * 根据openId查询用户
     *
     * @param openId
     * @return
     */
    UserBasicInfo getUserByOpenId(String openId);

    /**
     * 根据openId获取用户基本信息
     *
     * @param name
     * @return
     */
    Optional<UserBasicInfo> getOptionalByOpenId(String name);

    /**
     * 修改自己手机号和孩子姓名
     *
     * @param name
     * @param param
     * @return
     */
    boolean updateUserPhone(String name, UserUpdateParam param);

    /**
     * 查询包含userName的用户列表
     *
     * @param userName
     * @return
     */
    List<UserBasicInfo> getUserListByUserName(String userName);

    /**
     * 根据openId获取用户信息
     *
     * @param openId
     * @return
     */
    UserBasicInfo getUserInfoByOpenId(String openId);

    /**
     * 获取全部用户信息
     *
     * @return
     */
    List<UserBasicInfo> getUserInfoList();

    /**
     * 进行师傅和openId绑定
     *
     * @param doctorId
     * @param openId
     * @return
     */
    boolean setDoctorOpenId(Long doctorId, String openId);

    /**
     * 获取全部用户信息
     * @return
     */
    List<UserBasicInfo> listAll();
}
